<?php

namespace openapi\models\account\mobile;

use peng\helpers\StringHelper;

/**
 * 模型-手机获取图片验证码
 *
 * @author peng.huang
 */
class GetImgCodeModel extends \openapi\models\BaseInput {

    /**
     * 验证码类型[0=手机注册、1=手机无密码登录、2=手机找回密码]
     * 
     * @var int 
     */
    public $keytype = 0;

    /**
     * 手机号
     * 
     * @var string 
     */
    public $loginname;

    /**
     * 规则
     * 
     * @return array
     */
    public function rules() {
        return array(
            array('keytype', 'in', 'range' => array(0, 1, 2)),
            array(array('loginname'), 'required'),
            array('loginname', 'number'),
            array('loginname', 'string', 'length' => 11),
        );
    }

    /**
     * 属性名称
     * 
     * @return array
     */
    public function attrLabels() {
        return array(
            'keytype' => '验证码类型',
            'loginname' => '手机号'
        );
    }

    /**
     * 验证数据
     * 
     * @param boolean $clearErrors [是否清除错误]
     * @return boolean
     */
    public function validate($clearErrors = true) {
        if (!parent::validate($clearErrors)) {
            return FALSE;
        } elseif (!StringHelper::checkMobileValid($this->loginname)) {
            return $this->appendError('loginname', '手机号不正确。');
        } elseif (!$this->checkTokenValid()) {
            return FALSE; // 验证令牌
        }

        return TRUE;
    }

    /**
     * 提交
     * 
     * @param mixed $lParam [额外参数]
     * @return boolean
     */
    public function commit(&$lParam) {
        if (!$this->validate()) {
            return FALSE;
        }

        // 非 手机无密码登录
        if (1 !== $this->keytype) {
            $accountBiz = new \common\biz\AccountBiz();
            $isExists = $accountBiz->isExists(0, $this->loginname);
            if (0 === $this->keytype && $isExists) {
                return $this->appendError('loginname', '该手机号已经存在。'); // 手机注册   
            } elseif (2 === $this->keytype && !$isExists) {
                return $this->appendError('loginname', '该手机号不存在。'); // 手机找回密码
            }
        }

        return TRUE;
    }

}
